package chess.piece;

import javax.swing.ImageIcon;
import java.util.ArrayList;
import chess.Position;
import chess.Status;

/**
 * Classe Bishop (Bispo)
 * @author Beatriz Miho Anami
 * @author Lucas Rodrigues Anizelli
 * @author Marcos Okamura Rodrigues
 */
public final class Bishop extends Piece{
	/**
	 * Construtor do Bispo.
	 * @param id		id do bispo
	 * @param position	posição do bispo
	 * @param color		cor do bispo
	 * @param imageIcon	imageIcon do bispo
	 */
	public Bishop(int id, Position position, int color, ImageIcon imageIcon) {
		super(id, position, color, imageIcon);
	}
	
	/**
	 * Retorna a representação do Bispo em String.
	 * @return string "B"
	 */
	@Override
	public String toString(){
		return "B";
	}
	
	/**
	 * Verifica se o bispo pode capturar uma peça na posição especificada.
	 * @param position	posição da peça a ser capturada
	 * @return 			o status da captura
	 */
	public Status canCapture(Position position){
		return this.canMove(position);
	}

	/**
	 * Verifica se o bispo pode ser movido para a posição especificada.
	 * @param position	nova posição do bispo
	 * @return 			o status do movimento
	 */
	public Status canMove(Position position){ 
		if(Position.isSameLeftDiagonal(this.position, position)){
			return Status.CHECK_LEFT_DIAGONAL;
		} else if(Position.isSameRightDiagonal(this.position, position)){
			return Status.CHECK_RIGHT_DIAGONAL;
		} else {
			return Status.NO;
		}
	}

	/**
	 * Retorna o raio de alcance do bispo no tabuleiro.
	 * @return	ArrayList com as posições de alcance do bispo
	 */
	public ArrayList<Position> getRange(){
		ArrayList<Position> arrayList = new ArrayList<Position>();
		int row = position.getRow();
		int column = position.getColumn();
		int i, j;
		for(i = row + 1, j = column + 1; i < NUMBER_OF_ROWS && j < NUMBER_OF_COLUMNS; i++, j++){
			arrayList.add(new Position(i, j));
		}
		for(i = row + 1, j = column - 1; i < NUMBER_OF_ROWS && j >= 0; i++, j--){
			arrayList.add(new Position(i, j));
		}
		for(i = row - 1, j = column + 1; i >= 0 && j < NUMBER_OF_COLUMNS; i--, j++){
			arrayList.add(new Position(i, j));
		}
		for(i = row - 1, j = column - 1; i >= 0 && j >= 0; i--, j--){
			arrayList.add(new Position(i, j));
		}		
		return arrayList;
	}
}
